gtk_file_chooser_get_filename
gtk_file_chooser_get_filenames
gtk_file_chooser_get_filter
- gtk_file_chooser_get_folder_mode
gtk_file_chooser_get_local_only
gtk_file_chooser_get_preview_filename
gtk_file_chooser_get_preview_uri
gtk_file_chooser_set_extra_widget
gtk_file_chooser_set_filename
gtk_file_chooser_set_filter
- gtk_file_chooser_set_folder_mode
gtk_file_chooser_set_local_only
gtk_file_chooser_set_preview_widget
gtk_file_chooser_set_preview_widget_active
gtk_file_selection_set_filename
gtk_file_selection_set_select_multiple
gtk_file_selection_show_fileop_buttons
- gtk_file_system_add_bookmark
gtk_file_system_error_quark
gtk_file_system_filename_to_path
gtk_file_system_get_folder
gtk_file_system_get_parent
gtk_file_system_get_type
gtk_file_system_get_volume_for_path
+ gtk_file_system_insert_bookmark
gtk_file_system_list_bookmarks
gtk_file_system_list_volumes
gtk_file_system_make_path
gint pixel_size,
GError **error);
-static gboolean gtk_file_system_win32_add_bookmark (GtkFileSystem *file_system,
+static gboolean gtk_file_system_win32_insert_bookmark (GtkFileSystem *file_system,
const GtkFilePath *path,
+ gint position,
GError **error);
static gboolean gtk_file_system_win32_remove_bookmark (GtkFileSystem *file_system,
const GtkFilePath *path,
iface->uri_to_path = gtk_file_system_win32_uri_to_path;
iface->filename_to_path = gtk_file_system_win32_filename_to_path;
iface->render_icon = gtk_file_system_win32_render_icon;
- iface->add_bookmark = gtk_file_system_win32_add_bookmark;
+ iface->insert_bookmark = gtk_file_system_win32_insert_bookmark;
iface->remove_bookmark = gtk_file_system_win32_remove_bookmark;
iface->list_bookmarks = gtk_file_system_win32_list_bookmarks;
}
const gchar *display_name,
GError **error)
{
- gchar *base_filename;
+ const char *base_filename;
gchar *filename;
gchar *full_filename;
GError *tmp_error = NULL;
GtkFilePath *result;
- base_filename = filename_from_path (base_path);
+ base_filename = gtk_file_path_get_string (base_path);
g_return_val_if_fail (base_filename != NULL, NULL);
+ g_return_val_if_fail (g_path_is_absolute (base_filename), NULL);
filename = g_filename_from_utf8 (display_name, -1, NULL, NULL, &tmp_error);
if (!filename)
tmp_error->message);
g_error_free (tmp_error);
- g_free (base_filename);
return NULL;
}
full_filename = g_build_filename (base_filename, filename, NULL);
result = filename_to_path (full_filename);
- g_free (base_filename);
g_free (filename);
g_free (full_filename);
gchar **file_part,
GError **error)
{
- char *base_filename;
+ const char *base_filename;
gchar *last_slash;
gboolean result = FALSE;
- base_filename = filename_from_path (base_path);
+ base_filename = gtk_file_path_get_string (base_path);
g_return_val_if_fail (base_filename != NULL, FALSE);
+ g_return_val_if_fail (g_path_is_absolute (base_filename), FALSE);
last_slash = strrchr (str, G_DIR_SEPARATOR);
if (!last_slash)
}
}
- g_free (base_filename);
-
return result;
}
bookmarks_serialize (GSList **bookmarks,
gchar *uri,
gboolean add,
- GError **error)
+ gint position,
+ GError **error)
{
gchar *filename;
gboolean ok = TRUE;
}
if (ok && (f = fopen (filename, "wb")) != NULL)
{
+ if (add)
+ {
+ /* g_slist_insert() and our insert semantics are
+ * compatible, but maybe we should check for
+ * positon > length ?
+ *
+ */
+ if (!g_slist_find_custom (list, uri, strcmp))
+ list = g_slist_insert (list, g_strdup (uri), position);
+ else
+ {
+ g_set_error (error,
+ GTK_FILE_SYSTEM_ERROR,
+ GTK_FILE_SYSTEM_ERROR_ALREADY_EXISTS,
+ "%s already exists in the bookmarks list",
+ uri);
+ ok = FALSE;
+ }
+ }
for (entry = list; entry != NULL; entry = entry->next)
{
gchar *line = entry->data;
- if (strcmp (line, uri) != 0)
+ /* to remove the given uri */
+ if (!add && strcmp (line, uri) != 0)
{
fputs (line, f);
fputs ("\n", f);
}
}
- if (add)
- {
- fputs (uri, f);
- fputs ("\n", f);
- }
fclose (f);
}
else if (ok && error)
static GSList *_bookmarks = NULL;
static gboolean
-gtk_file_system_win32_add_bookmark (GtkFileSystem *file_system,
+gtk_file_system_win32_insert_bookmark (GtkFileSystem *file_system,
const GtkFilePath *path,
+ gint position,
GError **error)
{
gchar *uri = gtk_file_system_win32_path_to_uri (file_system, path);
- gboolean ret = bookmarks_serialize (&_bookmarks, uri, TRUE, error);
+ gboolean ret = bookmarks_serialize (&_bookmarks, uri, TRUE, position, error);
+ if (ret)
+ g_signal_emit_by_name (file_system, "bookmarks-changed", 0);
g_free (uri);
return ret;
GError **error)
{
gchar *uri = gtk_file_system_win32_path_to_uri (file_system, path);
- gboolean ret = bookmarks_serialize (&_bookmarks, uri, FALSE, error);
+ gboolean ret = bookmarks_serialize (&_bookmarks, uri, FALSE, 0, error);
+ if (ret)
+ g_signal_emit_by_name (file_system, "bookmarks-changed", 0);
g_free (uri);
return ret;
}
GSList *entry;
- if (bookmarks_serialize (&_bookmarks, "", FALSE, NULL))
+ if (bookmarks_serialize (&_bookmarks, "", FALSE, 0, NULL))
{
for (entry = _bookmarks; entry != NULL; entry = entry->next)
{